package controllo;


import grafica.GiocatoreVista;
import grafica.graficaA.GiocatoreCerchio;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Observable;
import java.util.Observer;
import vista.AlertDialog;

import modulo.Giocatore;
import modulo.ProxyListaGiocatori;
import modulo.temp.FastDardo;
import modulo.temp.SlowDardo;


public class SparaControllore extends Observable implements MouseListener, MouseMotionListener,KeyListener {

	private ProxyListaGiocatori listaGiocatori;
	private AlertDialog alert;

	public SparaControllore(ProxyListaGiocatori lista,AlertDialog alert) {
		super();
		this.listaGiocatori=lista;
		this.alert=alert;
	}

	@Override
	public void mouseClicked(MouseEvent arg0) {
		Giocatore[] giocatori=listaGiocatori.getElencoGiocatori();
		
		/* E' cos�? io giocatore 0 � quello controllato dall'utente?
		 * Ma siamo sicuri che sia questo il modo migliore di gestire
		 * questa cosa?
		 * il Prof
		 */
		Giocatore gPrincipale=giocatori[0];
		
		if(gPrincipale.getEnergia()>=gPrincipale.getDardo().getAffaticamento()){
			gPrincipale.LanciaDardo();
			int xM = arg0.getX();
		int yM = arg0.getY();
		
		GiocatoreVista vi=new GiocatoreCerchio();
		
		gPrincipale.getDardo().setYi(gPrincipale.getY());
		gPrincipale.getDardo().setXi(gPrincipale.getX());
		gPrincipale.getDardo().setPuntoArrivo(xM, yM);
		for (int i = 1; i < giocatori.length; i++) {
			vi.setIstanza(giocatori[i]);
			//cambiare togliere punto Appartenenza
			if (vi.puntoAppartenenza(gPrincipale.getDardo().getXf(), gPrincipale.getDardo().getYf())) {
				if(gPrincipale.getSquadra()!=giocatori[i].getSquadra()){
					giocatori[i].Colpito();
				}
			} 
		}
		if(gPrincipale.ControllaVittoria(listaGiocatori)){
			alert.SetText("HaiVinto");
			alert.setChiudiFinestra(true);
			alert.setVisible(true);
		}
		setChanged();
		notifyObservers();
		}
		//DartVista
	}
	public void AggiungiOsservatore(Observer observer){
		this.addObserver(observer);
	}
	@Override
	public void keyPressed(KeyEvent e) {
		char carattere=e.getKeyChar();
		if(carattere=='q'){
			listaGiocatori.getElencoGiocatori()[0].setDardo(new SlowDardo());
		}
		else if(e.getKeyChar()=='e'){
			listaGiocatori.getElencoGiocatori()[0].setDardo(new FastDardo());
		}

	}

	@Override
	public void keyTyped(KeyEvent e) {
		
	}

	@Override
	public void keyReleased(KeyEvent e) {

	}
	@Override
	public void mouseEntered(MouseEvent arg0) {
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
	}

	@Override
	public void mouseMoved(MouseEvent arg0) {

	}

	@Override
	public void mousePressed(MouseEvent arg0) {

	}

	@Override
	public void mouseDragged(MouseEvent arg0) {

	}

	@Override
	public void mouseReleased(MouseEvent arg0) {

	}

}
